import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.GeneralPath;
import java.util.LinkedList;

public class DecisaoMultipla extends Identificador implements
		RetanguloListener, IElementosChegadaPartida, IOperadoresComTexto {

	private LinkedList<LigacaoIdentificadorDestinoTexto> ligacoes;

	private LigacaoIdentificadorDestinoTexto ligacao;

	/**
	 * @uml.property name="poligono"
	 */
	private GeneralPath poligono;

	/**
	 */
	public DecisaoMultipla(String identificacao, Retangulo retanguloEnvolvente) {
		super(identificacao, retanguloEnvolvente);
	}

	/**
	 */
	public DecisaoMultipla(Retangulo retanguloEnvolvente) {
		super(retanguloEnvolvente);
		retanguloEnvolvente.setRetanguloListener(this);
		this.ligacoes = new LinkedList<LigacaoIdentificadorDestinoTexto>();
		construirDecisaoMultipla();
	}

	/**
		 */
	public void construirDecisaoMultipla() {
		int x = retanguloEnvolvente.getPontoSuperiorEsquerdo().getX();
		int y = retanguloEnvolvente.getPontoSuperiorEsquerdo().getY();
		int largura = retanguloEnvolvente.getTamanho().getLargura();
		int altura = retanguloEnvolvente.getTamanho().getAltura();

		this.poligono = new GeneralPath();
		this.poligono.moveTo(x + 10, y);
		this.poligono.lineTo(x + altura - 10, y);
		this.poligono.lineTo(x + altura, y + (largura / 2));
		this.poligono.lineTo(x + altura - 10, y + largura);
		this.poligono.lineTo(x + 10, y + largura);
		this.poligono.lineTo(x, y + (largura / 2));
		this.poligono.lineTo(x + 10, y);
		this.poligono.closePath();
	}

	@Override
	public void retanguloAlterado() {
		construirDecisaoMultipla();
	}

	/**
		 */
	public void desenhar(Graphics graphics) {
		Graphics2D g2d = (Graphics2D) graphics.create();

		g2d.draw(this.poligono);
		g2d.setColor(Color.BLACK);
		g2d.drawString(identificacao, this.retanguloEnvolvente
				.getPontoSuperiorEsquerdo().getX()
				+ (this.retanguloEnvolvente.getTamanho().getAltura() / 2),
				this.retanguloEnvolvente.getPontoSuperiorEsquerdo().getY());
		g2d.dispose();
	}

	/**
			 */
	public boolean isSob(Coordenada coordenada) {
		return this.retanguloEnvolvente.contem(coordenada);
	}

	@Override
	public boolean podeAssociar(Identificador identificadorDestino) {
		// TODO Auto-generated method stub
		if (identificadorDestino != this) {
			return true;
		}
		return false;
	}

	@Override
	public LigacaoIdentificadorDestinoTexto associarCTexto(
			Identificador identificadorDestino) {
		// TODO Auto-generated method stub
		ligacao = new LigacaoIdentificadorDestinoTexto(this, identificadorDestino);
		this.ligacoes.add(ligacao);
		return ligacao;
	}

}
